/*
 * @Author: master
 * @Date: 2022-03-28 11:14:49
 * @LastEditTime: 2023-11-14 10:21:17
 * @Description: vite配置
 */
import { defineConfig } from 'vite';
import { getPort, getIPAddress } from './node/util.js'; // node服务工具
import plugins from './config/plugins.js'; // 插件服务
import output from './config/output.js'; // 文件输出
import alias from './config/alias.js'; // 别名
import proxy from './config/proxy.js'; // 服务代理
import css from './config/css.js'; // css
const path = require('path');
export default defineConfig(async ({ command, mode }) => {
  /**
   * vite的自定义配置
   */
  let viteConfig = JSON.parse(process.env.viteConfig);
  // 融合defineConfig参数
  viteConfig = { ...viteConfig, command, mode };
  // 端口和ip
  let port, ipAddress;
  if (command === 'serve') {
    // 获取端口
    port = await getPort();
    // 获取ip地址
    ipAddress = getIPAddress();
    viteConfig = { ...viteConfig, port, ipAddress };
  }
  /**
   * 默认配置
   */
  const defaultConfig = {
    // 入口
    root: viteConfig.root,
    // 开发或生产环境服务的公共基础路径
    base: viteConfig.base || '/',
    mode: mode, // 模式
    resolve: {
      // 获取别名
      alias: alias(viteConfig),
    },
    // 定义全局常量替换方式
    define: {
      // vite的配置属性
      viteConfig: { ...viteConfig },
    },
    publicDir: `${viteConfig.root}/public`, // 静态资源服务的文件夹
    // 获取plugins
    plugins: plugins(viteConfig),
    // css loader
    css: css(viteConfig),
  };
  // 开发状态
  if (command === 'serve') {
    // 开发服务配置
    const server = {
      host: '0.0.0.0',
      port: port,
      open: true,
    };
    // https配置
    if (viteConfig.https === true) server.https = true;
    // proxy配置
    if (viteConfig.proxy) server.proxy = proxy(viteConfig);
    return {
      ...defaultConfig,
      // 开发服务配置
      server,
    };
  }
  // 打包状态
  else {
    return {
      ...defaultConfig,
      build: {
        outDir: path.join(__dirname, '..', `dist/${viteConfig.name}`), // 输出路径
        emptyOutDir: true, // 打包清除
        // 输入静态资源路径
        rollupOptions: {
          // 获取文件输出
          output: output(viteConfig),
        },
        chunkSizeWarningLimit: 2000,
      },
    };
  }
});
